// ShamMK.cpp : implementation file
//

#include "stdafx.h"
#include "dlltool.h"
#include "ShamMK.h"
#include <vector>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CShamMK dialog


CShamMK::CShamMK(CWnd* pParent /*=NULL*/)
	: CDialog(CShamMK::IDD, pParent)
{
	//{{AFX_DATA_INIT(CShamMK)
	m_csScrit = _T("");
	//}}AFX_DATA_INIT
}


void CShamMK::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CShamMK)
	DDX_Text(pDX, IDC_EDIT_SCRIPT, m_csScrit);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CShamMK, CDialog)
	//{{AFX_MSG_MAP(CShamMK)
	ON_BN_CLICKED(IDC_BN_RUN, OnBnRun)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShamMK message handlers
//DWORD API ThreadProc(LPVOID lpParameter)
//{
//	return 0;
//}
typedef struct Tagwindowevent
{
	int ntype;
	int nnum;
}windowevent;
//#define TEMP
HWND m_hwnd;
bool g_flag;
DWORD WINAPI CShamMK::MyThreadProc(LPVOID lpParameter)
{
	char * data = (char *)lpParameter;
	int len = strlen(data);
	std::vector<windowevent> vectorevent;
	windowevent event;
	for(int i =0 ;i<len ;i++)
	{
		event.ntype = 0;
		event.nnum = 0;
		i++;
		for(;data[i]!= ',';i++)
		{
			event.ntype = event.ntype * 10 + data[i] - '0';
		}
		i++;
		for(;data[i]!= ']';i++)
		{
			event.nnum = event.nnum * 10 + data[i] - '0';
		}
		vectorevent.push_back(event);
	}
	POINT Point;
	int size = vectorevent.size();
#ifdef TEMP
	for(int j = 0;j< 0x0ffffff;j++)
	{
		Sleep(250000);
		GetCursorPos(&Point);
		keybd_event('X',0x45,KEYEVENTF_EXTENDEDKEY | 0,0);
		keybd_event('X',0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
		mouse_event(MOUSEEVENTF_RIGHTDOWN,Point.x,Point.y,0,GetMessageExtraInfo());
		mouse_event(MOUSEEVENTF_RIGHTUP,Point.x,Point.y,0,GetMessageExtraInfo());
		Sleep(6000);
		keybd_event('V',0x45,KEYEVENTF_EXTENDEDKEY | 0,0);
		keybd_event('V',0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
	}
#else
	HWND temp;
	for(;true;)
	{
	for(int j = 0;j< size;j++)
	{
		GetCursorPos(&Point);
		temp = ::WindowFromPoint(Point);
		if(((DWORD)m_hwnd) == ((DWORD)temp))
		{
			switch(vectorevent[j].ntype)
			{
			case 0:
				Sleep(vectorevent[j].nnum * 1000);
				break;
			case 1:
				mouse_event(vectorevent[j].nnum,Point.x,Point.y,0,GetMessageExtraInfo());
				break;
			case 2:
				//VK_PRINT
				keybd_event(vectorevent[j].nnum,0x45,KEYEVENTF_EXTENDEDKEY | 0,0);
				keybd_event(vectorevent[j].nnum,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
			}
		}
		else
		{
			Sleep(1000);
			j--;
		}
	}
	}

#endif
	free(lpParameter);
    return 1;
}
void CShamMK::OnBnRun() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	char sdaf[500];
	m_hwnd = ::FindWindow("_Class",NULL);
	::GetWindowText(::FindWindow("_Class",NULL),sdaf,500);
	CString asdf = m_csScrit + CString("sdaf");
	m_csScrit.Replace("MOUSE_MOVE","1");
	m_csScrit.Replace("MOUSE_LEFTDOWN","2");
	m_csScrit.Replace("MOUSE_LEFTUP","4");
	m_csScrit.Replace("MOUSE_RIGHTDOWN","8");
	m_csScrit.Replace("MOUSE_RIGHTUP","16");
	m_csScrit.Replace("MOUSE_MIDDLEDOWN","32");
	m_csScrit.Replace("MOUSE_MIDDLEUP","64");
	m_csScrit.Replace("MOUSE_WHEEL","2048");

char source[100],durce[100];
int i;
	for(i= 48;i<58;i++)
	{
		sprintf(durce,"%d",i);
		sprintf(source,"VK_%c",i);
		m_csScrit.Replace(source,durce);
	}	
	for(i= 65;i<91;i++)
	{
		sprintf(durce,"%d",i);
		sprintf(source,"VK_%c",i);
		m_csScrit.Replace(source,durce);
	}
	m_csScrit.Replace("VK_LBUTTON","1");
	m_csScrit.Replace("VK_RBUTTON","2");
	m_csScrit.Replace("VK_CANCEL","3");
	m_csScrit.Replace("VK_MBUTTON","4 ");
	m_csScrit.Replace("VK_BACK","8");
	m_csScrit.Replace("VK_TAB","9");
	m_csScrit.Replace("VK_CLEAR","0x0C");
	m_csScrit.Replace("VK_RETURN","0x0D");
	m_csScrit.Replace("VK_SHIFT","0x10");
	m_csScrit.Replace("VK_CONTROL","0x11");
	m_csScrit.Replace("VK_MENU","0x12");
	m_csScrit.Replace("VK_PAUSE","0x13");
	m_csScrit.Replace("VK_CAPITAL","0x14");
	m_csScrit.Replace("VK_KANA","0x15");
	m_csScrit.Replace("VK_HANGEUL","0x15");  
	m_csScrit.Replace("VK_HANGUL","0x15");
	m_csScrit.Replace("VK_JUNJA","0x17");
	m_csScrit.Replace("VK_FINAL","0x18");
	m_csScrit.Replace("VK_HANJA","0x19");
	m_csScrit.Replace("VK_KANJI","0x19");
	m_csScrit.Replace("VK_ESCAPE","0x1B");
	m_csScrit.Replace("VK_CONVERT","0x1C");
	m_csScrit.Replace("VK_NONCONVERT","0x1D");
	m_csScrit.Replace("VK_ACCEPT","0x1E");
	m_csScrit.Replace("VK_MODECHANGE","0x1F");
	m_csScrit.Replace("VK_SPACE","0x20");
	m_csScrit.Replace("VK_PRIOR","0x21");
	m_csScrit.Replace("VK_NEXT","0x22");
	m_csScrit.Replace("VK_END","0x23");
	m_csScrit.Replace("VK_HOME","0x24");
	m_csScrit.Replace("VK_LEFT","0x25");
	m_csScrit.Replace("VK_UP","0x26");
	m_csScrit.Replace("VK_RIGHT","0x27");
	m_csScrit.Replace("VK_DOWN","0x28");
	m_csScrit.Replace("VK_SELECT","0x29");
	m_csScrit.Replace("VK_PRINT","0x2A");
	m_csScrit.Replace("VK_EXECUTE","0x2B");
	m_csScrit.Replace("VK_SNAPSHOT","0x2C");
	m_csScrit.Replace("VK_INSERT","0x2D");
	m_csScrit.Replace("VK_DELETE","0x2E");
	m_csScrit.Replace("VK_HELP","0x2F");
	m_csScrit.Replace("VK_LWIN","0x5B");
	m_csScrit.Replace("VK_RWIN","0x5C");
	m_csScrit.Replace("VK_APPS","0x5D");
	m_csScrit.Replace("VK_NUMPAD0","0x60");
	m_csScrit.Replace("VK_NUMPAD1","0x61");
	m_csScrit.Replace("VK_NUMPAD2","0x62");
	m_csScrit.Replace("VK_NUMPAD3","0x63");
	m_csScrit.Replace("VK_NUMPAD4","0x64");
	m_csScrit.Replace("VK_NUMPAD5","0x65");
	m_csScrit.Replace("VK_NUMPAD6","0x66");
	m_csScrit.Replace("VK_NUMPAD7","0x67");
	m_csScrit.Replace("VK_NUMPAD8","0x68");
	m_csScrit.Replace("VK_NUMPAD9","0x69");
	m_csScrit.Replace("VK_MULTIPLY","0x6A");
	m_csScrit.Replace("VK_ADD","0x6B");
	m_csScrit.Replace("VK_SEPARATOR","0x6C");
	m_csScrit.Replace("VK_SUBTRACT","0x6D");
	m_csScrit.Replace("VK_DECIMAL","0x6E");
	m_csScrit.Replace("VK_DIVIDE","0x6F");
	m_csScrit.Replace("VK_F1","0x70");
	m_csScrit.Replace("VK_F2","0x71");
	m_csScrit.Replace("VK_F3","0x72");
	m_csScrit.Replace("VK_F4","0x73");
	m_csScrit.Replace("VK_F5","0x74");
	m_csScrit.Replace("VK_F6","0x75");
	m_csScrit.Replace("VK_F7","0x76");
	m_csScrit.Replace("VK_F8","0x77");
	m_csScrit.Replace("VK_F9","0x78");
	m_csScrit.Replace("VK_F10","0x79");
	m_csScrit.Replace("VK_F11","0x7A");
	m_csScrit.Replace("VK_F12","0x7B");
	m_csScrit.Replace("VK_F13","0x7C");
	m_csScrit.Replace("VK_F14","0x7D");
	m_csScrit.Replace("VK_F15","0x7E");
	m_csScrit.Replace("VK_F16","0x7F");
	m_csScrit.Replace("VK_F17","0x80");
	m_csScrit.Replace("VK_F18","0x81");
	m_csScrit.Replace("VK_F19","0x82");
	m_csScrit.Replace("VK_F20","0x83");
	m_csScrit.Replace("VK_F21","0x84");
	m_csScrit.Replace("VK_F22","0x85");
	m_csScrit.Replace("VK_F23","0x86");
	m_csScrit.Replace("VK_F24","0x87");
	m_csScrit.Replace("VK_NUMLOCK","0x90");
	m_csScrit.Replace("VK_SCROLL","0x91");
	m_csScrit.Replace("VK_LSHIFT","0xA0");
	m_csScrit.Replace("VK_RSHIFT","0xA1");
	m_csScrit.Replace("VK_LCONTROL","0xA2");
	m_csScrit.Replace("VK_RCONTROL","0xA3");
	m_csScrit.Replace("VK_LMENU","0xA4");
	m_csScrit.Replace("VK_RMENU","0xA5");
	m_csScrit.Replace("VK_PROCESSKEY","0xE5");
	m_csScrit.Replace("VK_ATTN","0xF6");
	m_csScrit.Replace("VK_CRSEL","0xF7");
	m_csScrit.Replace("VK_EXSEL","0xF8");
	m_csScrit.Replace("VK_EREOF","0xF9");
	m_csScrit.Replace("VK_PLAY","0xFA");
	m_csScrit.Replace("VK_ZOOM","0xFB");
	m_csScrit.Replace("VK_NONAME","0xFC");
	m_csScrit.Replace("VK_PA1","0xFD");
	m_csScrit.Replace("VK_OEM_CLEAR","0xFE");

	uint8 * buff = (uint8 *)malloc(m_csScrit.GetLength() + 1);
	memset(buff,0,m_csScrit.GetLength() + 1);
	memcpy(buff,m_csScrit.GetBuffer(0),m_csScrit.GetLength());
	::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThreadProc,  buff, 0, NULL); 
}
